// pages/my/my.js
let utils = require('../../utils/utils.js')
const app = getApp()
let _this;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    
  },

  navTo(e) {
    app.com.navTo(e)
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    _this = this;
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let userInfo = wx.getStorageSync("userInfo");
    if (userInfo) {
      this.setData({
        userInfo: userInfo
      })
    } else {
      utils.setCallbackUrl("switchTab");
      wx.navigateTo({
        url: '/pages/login/login',
      })
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

 /**
   * 通过微信获取手机号码
   */
  getPhoneNumber (e) {
    console.log(e.detail.code)  // 动态令牌
    console.log(e.detail.errMsg) // 回调信息（成功失败都会返回）
    console.log(e.detail.errno)  // 错误码（失败时返回）
  },

  // 第一步 初始化蓝牙模块
  openBluetoothAdapter() {
    wx.openBluetoothAdapter({
      success: (res) => {
        console.log('第一步、蓝牙初始化成功', res)
        // 开始搜索附近蓝牙
        this.startBluetoothDevicesDiscovery()
      },
      fail: (res) => {
        console.log("第一步、蓝牙初始化失败", res);
        wx.showToast({ title: '蓝牙初始化失败', icon: 'none' })
      }
    })
  },

  // 第二步 开始搜索附近的蓝牙设备
  startBluetoothDevicesDiscovery() {
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: (res) => {
        console.log('开始搜索附近的蓝牙设备', res)
        this.onBluetoothDeviceFound()
      },
    })
  },

  // 第三步 监听发现附近的蓝牙设备
  onBluetoothDeviceFound() {
    wx.onBluetoothDeviceFound((res) => {
      res.devices.forEach(device => {
        if (!device.name && !device.localName) { return }
        console.log("发现的蓝牙设备", device)
        this.data.devices.push(device)
        this.setData({ devices: this.data.devices })
      })
    })
  },

  // 第四步、 建立连接
  createBLEConnection(deviceId) {
    wx.createBLEConnection({
      deviceId: deviceId,
      success: (res) => {
        wx.showToast({ title: '蓝牙连接成功', icon: 'none' })
        this.getBLEDeviceServices(deviceId)
      },
      fail(res) { wx.showToast({ title: '蓝牙连接失败', icon: 'none' }) }
    })
  },

  // 第五步、获取蓝牙设备所有服务(service)。
  getBLEDeviceServices(deviceId) {
    wx.getBLEDeviceServices({
      deviceId: deviceId,
      success: (res) => {
        console.log('蓝牙设备所有服务', res)
        for (var i = 0; i < res.services.length; i++) {
          if (res.services[i].isPrimary) {
            this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid);
            return;
          }
        }
      },
      fail(res) { console.log('蓝牙设备所有服务失败', res) }
    })
  },

  // 第六步、 获取蓝牙设备某个服务中所有特征值(characteristic)
  getBLEDeviceCharacteristics(deviceId, serviceId) {
    wx.getBLEDeviceCharacteristics({
      deviceId, serviceId,
      success: (res) => {
        for (let i = 0; i < res.characteristics.length; i++) {
          let item = res.characteristics[i]
          
          if (item.properties.write) {
            this._deviceId = deviceId
            this._serviceId = serviceId
            this._characteristicId = item.uuid
          }
          if (item.properties.notify) {
            this._readDeviceId = deviceId
            this._readServiceId = serviceId
            this._readCharacteristicId = item.uuid
          }
        }
      }
    })
  },

  // 第七步、获取蓝牙的返回信息
  onBLEValue() {
    wx.onBLECharacteristicValueChange(function (res) {
      var value = ab2Str(res.value); console.log("第七步，读取蓝牙的值", value);
    })
    wx.notifyBLECharacteristicValueChange({
      state: true, // 启用 notify 功能
      deviceId: this._readDeviceId,
      serviceId: this._readServiceId,
      characteristicId: this._readCharacteristicId,
      success(res) { console.log('第七步，启用notify成功', res.errMsg) }
    })
  },

  //第八步、 向蓝牙设备发送数据
  writeBLECharacteristicValue() {
    // 向蓝牙设备发送一个0x00的16进制数据
      let buffer = new ArrayBuffer(1)
      let dataView = new DataView(buffer)
      dataView.setUint8(0, Math.random() * 255 | 0)
      wx.writeBLECharacteristicValue({
        deviceId: this._deviceId,
        serviceId: this._deviceId,
        characteristicId: this._characteristicId,
        value: buffer,
      })
    },

  linkBLE(e) {
    console.log("search BLE");
    this.openBluetoothAdapter();
  }
})